]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Immediately pop up menu on right click
authorColin Walters <walters@verbum.org>
Fri, 25 Sep 2009 20:45:21 +0000 (16:45 -0400)
committerColin Walters <walters@verbum.org>
Fri, 2 Oct 2009 23:28:25 +0000 (19:28 -0400)
We were actually showing a menu on button 3 before, but only
through a chain of coincidences.  This patch explicitly supports
it and makes sure we show it immediately rather than after
a timeout. Pass the activating button in so that we only pop
down on that button.

https://bugzilla.gnome.org/show_bug.cgi?id=596371

js/ui/appIcon.js

index e6d8ec8b882aa70d1df8e9a5ef438897b7eb979e..7a9df6f7aa371d7e7875a3fabedbea6598ae53e6 100644 (file)
@@ -210,14 +210,19 @@ AppIcon.prototype = {
     },
 
     _updateMenuOnButtonPress: function(actor, event) {
-        if (this._menuTimeoutId != 0)
-            Mainloop.source_remove(this._menuTimeoutId);
-        this._menuTimeoutId = Mainloop.timeout_add(APPICON_MENU_POPUP_TIMEOUT_MS,
-                                                   Lang.bind(this, this.popupMenu));
+        let button = event.get_button();
+        if (button == 1) {
+            if (this._menuTimeoutId != 0)
+                Mainloop.source_remove(this._menuTimeoutId);
+            this._menuTimeoutId = Mainloop.timeout_add(APPICON_MENU_POPUP_TIMEOUT_MS,
+                                                       Lang.bind(this, function () { this.popupMenu(button); }));
+        } else if (button == 3) {
+            this.popupMenu(button);
+        }
         return false;
     },
 
-    popupMenu: function() {
+    popupMenu: function(activatingButton) {
         if (this._menuTimeoutId != 0) {
             Mainloop.source_remove(this._menuTimeoutId);
             this._menuTimeoutId = 0;
@@ -241,7 +246,7 @@ AppIcon.prototype = {
             }));
         }
 
-        this._menu.popup();
+        this._menu.popup(activatingButton);
 
         return false;
     },
@@ -476,13 +481,13 @@ AppIconMenu.prototype = {
         }
     },
 
-    popup: function() {
+    popup: function(activatingButton) {
         let [stageX, stageY] = this._source.actor.get_transformed_position();
         let [stageWidth, stageHeight] = this._source.actor.get_transformed_size();
 
         this._redisplay();
 
-        this._windowContainer.popup(0, Main.currentTime());
+        this._windowContainer.popup(activatingButton, Main.currentTime());
 
         this.emit('popup', true);